//////////////////////////////////////////////////////////////////////
// Haar2DCUDA.h
//
// SHEN Fangyang
// me@shenfy.com
//
// Copyright (C) SHEN Fangyang, 2010, All rights reserved.
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
//  Brief Description
//
//	CUDA implementation of 2D Haar wavelet encoding/decoding,
//	maximum supported resolution: 512*512
//
//////////////////////////////////////////////////////////////////////
#pragma once

namespace w32lib
{
	template<typename T>
	class CImgTmpl;
}


namespace grflib
{
	namespace image
	{
		class CHaar2DCUDA
		{
		public:
			CHaar2DCUDA(void);
			~CHaar2DCUDA(void);

			void Release(void);
			bool Init(UINT width, UINT height, UINT channel);

			bool Encode(w32lib::CImgTmpl<float> _out_ *pCoeff, const w32lib::CImgTmpl<float> _in_ *pImg);
			bool Decode(w32lib::CImgTmpl<float> _out_ *pImg, const w32lib::CImgTmpl<float> _in_ *pCoeff);

		protected:
			bool CudaEncode(float *out, const float *in);
			bool CudaDecode(float *out, const float *in);

		protected:

			float *m_pBuf;
			float *m_pdBuf1;
			float *m_pdBuf2;
			UINT m_width;
			UINT m_channel;
		};
	} //end of namespace image
} //end of namespace grflib